package com.edt.ichannel.api.service;

import com.edt.ichannel.api.common.entity.ActionResult;
import com.edt.ichannel.api.entiy.local.*;
import com.edt.ichannel.api.entiy.local.EntityForDevelopMenterSyncReq;
import com.edt.ichannel.api.entiy.local.EntityForUnicomPayParamBatch;
import com.edt.ichannel.api.entiy.local.EntityFormUnicomPayParam;

import java.util.Date;
import java.util.List;

/**
 * 调用外部接口服务类
 * 该类用于给系统提供调用外部接口方法，建议调用外部接口的方法全部卸载这里
 *
 * @author 孙梁
 * 2018/6/8 11:20
 */
public interface EdtApiService {

    /**
     * 三户信息接口
     *
     * @param phoneNum 只需要传手机号码
     * @return 查询结果
     * @author sl
     */
    ActionResult sanHu(String phoneNum, String infoList);

    /**
     * 流量订购/退订接口 cbss
     *
     * @param params map.put("phone", params.getPhone());
     *               map.put("productId", params.getProductId());
     *               map.put("packageId", params.getPackageId());
     *               map.put("elementId", params.getElementId());
     *               map.put("enableTag", params.getEnableTag());
     *               map.put("optType", params.getOptType());
     * @return 充值结果
     * @author sl
     */
    ActionResult trafficCbss(EdtApiParamEntity params);

    /**
     * 流量订购/退订接口 ess
     *
     * @param params map.put("productId", params.getProductId());
     *               map.put("packageId", params.getPackageId());
     *               map.put("elementId", params.getElementId());
     *               map.put("enableTag", params.getEnableTag());
     *               map.put("optType", params.getOptType());
     * @return 退订结果
     * @author sl
     */
    ActionResult trafficEss(EdtApiParamEntity params);

    /**
     * 根据appId 去中控拿 openid
     *
     * @param appId appid
     * @return java.lang.String
     * accessToken
     * @author 孙梁
     * 2018/6/8 11:19
     */
    String getAccessToken(String appId);


    /**
     * 调用沃支付接口
     *
     * @param woPayParams 支付参数
     * @return com.edt.ichannel.api.common.entity.ActionResult
     * 支付结果
     * @author 孙梁
     * 2018/6/8 11:20
     */
    ActionResult woPay(HttpPostParamsWoPay woPayParams);

    /**
     * 获得地市编码
     *
     * @param cityCode getCityByCode
     * @return java.lang.String
     * getCityByCode
     * @author 孙梁
     * 2018/6/27 9:46
     */
    String getCityCodeByCode(String cityCode);

    /**
     * 获得地市信息
     *
     * @param cityCode getCityByCode
     * @return java.lang.String
     * getCityByCode
     * @author 孙梁
     * 2018/6/27 9:46
     */
    ActionResult getCityByCode(String cityCode);

    /**
     * 发送短信
     *
     * @param sendSMS ( sendPhone 发送人号码 （没有可填空）,content 短信内容，receivePhone 接收人号码)
     * @return com.edt.ichannel.api.common.entity.ActionResult
     * @author 李爽
     * @date 2018/7/11 13:20
     */
    ActionResult sendsms(SendSMS sendSMS);

    /**
     * 根据订单信息查询首充信息
     * @param serviceCode,orderCode,orderDate
     *             订单信息
     *

     * @return com.edt.ichannel.api.common.entity.ActionResult
     * 查询结果
     * @author 孙梁
     * 2018/8/23 10:39
     */
    public ActionResult selectFirstMoneyInfo(String serviceCode, String orderCode, Date orderDate);

    /**
     * 根据订单信息查询首充信息
     * @param serviceCode,orderCode
     *             订单信息
     * @return com.edt.ichannel.api.common.entity.ActionResult
     *              查询结果
     * @author 孙梁
     * 2018/9/27 13:39
     */
    ActionResult selectRelation(String serviceCode, String orderCode);




    /**
     * 调用接口A 即查询首充接口
     * @param orderChannel
     *             订单
     * @return com.edt.ichannel.api.entiy.local.FirstmoneyLog
     *              接口返回信息
     * @author 孙梁
     * 2018/9/27 11:24
     */
    FirstmoneyLog selectInterfaceA(OrderChannel orderChannel);
    void selectInterfaceB(OrderCreditKd orderCreditKd);
    int validateOnlineState(String serviceCode, String orderCode, Date orderDate, String removeTag, String userStateCodeset);


    /**
     * 发送短信全网
     *
     * @param phone phone
     * @param text  text
     * @return com.edt.ichannel.api.common.entity.ActionResult
     * @author 李爽
     * @date 2018/9/13 9:08
     */
    ActionResult smsSendMessage(String phone, String text);


     /**
      * 联通支付实时接口
      * @param entityFormUnicomPayParam
      *             请求信息
      * @return com.edt.ichannel.api.common.entity.ActionResult
      *              解析后返回结果
      * @author 孙梁
      * 2018/10/26 11:33
      */
    ActionResult unicomPay(EntityFormUnicomPayParam entityFormUnicomPayParam);



    /**
     * 批量支付上传文件 并通知
     * @param unicomPayParamBatcheList, totalMoney
     *             数据集合，总钱数
     * @author 孙梁
     * 2018/10/26 13:28
     */
     ActionResult unicomPayBatch(List<EntityForUnicomPayParamBatch> unicomPayParamBatcheList, int totalMoney);
    /**
     * 联通支付批量接口通知请求
     * @param batchCode,fileName
     *              批次号,文件名
     * @return com.edt.ichannel.api.common.entity.ActionResult
     *              noticeUnicomPayBatch
     * @author 孙梁
     * 2018/10/26 11:34
     */
    ActionResult noticeUnicomPayBatch(String batchCode, String fileName);


    /**
     * 同步联通支付回盘文件回调修改状态流程
     * @param unicomPayReqs 回盘数据
     */
    void callBackIchannel(List<UnicomPayReq> unicomPayReqs);


    /**
     * C流程微厅传参接口
     * @param orderCode 订单编号
     * @param phoneNum 手机号码
     * @return 调用结果
     */
    ActionResult getRhKdByNumberTel(String orderCode, String phoneNum);

    /**
     * 获取地市编码
     * @param cityName 地市名称
     * @return 查询结果
     */
    ActionResult getAreaStandardCodeLikeCityName(String cityName);
    /**
     * 获取地市编码
     * @param cityName 地市名称
     * @return 查询结果
     */
    String getCityCodeByName(String cityName);


    /**
     * 集中渠道接口
     * @param entityForDevelopMenterSyncReq 调用参数
     * @return 调用结果
     */
    ActionResult developMenterSync(EntityForDevelopMenterSyncReq entityForDevelopMenterSyncReq);

    /**
     * 集中渠道接口
     * @param entityForDevelopMenterSyncReq 调用参数
     * @return 调用结果
     */
    ActionResult developMenterSyncRegist(EntityForDevelopMenterSyncReq entityForDevelopMenterSyncReq);
    /**
     * 集中渠道接口
     * @param entityForDevelopMenterSyncReq 调用参数
     * @return 调用结果
     */
    ActionResult developMenterSyncUpdate(EntityForDevelopMenterSyncReq entityForDevelopMenterSyncReq);
    /**
     * 集中渠道接口
     * @param entityForDevelopMenterSyncReq 调用参数
     * @return 调用结果
     */
    ActionResult developMenterSyncCancel(EntityForDevelopMenterSyncReq entityForDevelopMenterSyncReq);

    /**
     * 查询 userid
     * @param serviceCode 业务号码
     * @param orderCode 订单编码
     * @param orderDate 订单时间
     * @return userid
     */
    String selectUserId(String serviceCode, String orderCode, Date orderDate);


    /**
     * 首先验证useid，若useid与下单时不一致，不进入佣金结算
     * @param orderCode 订单编号
     * @param serviceCode 业务号码
     * @param orderDate 订单时间
     * @param userId 待验证userid
     * @param userIdKfk 接口返回userId
     * @return 验证结果
     */
    ActionResult validateUserId(String orderCode, String serviceCode, Date orderDate, String userId, String userIdKfk);

    /**
     * 当useid一致，再验证发展人编码，若发展人编码与下单时不一致，不进入佣金结算
     * @param orderCode 订单编号
     * @param serviceCode 业务号码
     * @param orderDate 订单时间
     * @param developStaffId 下单发展人编码
     * @param developStaffIdKfk 查询接口后发展人编码
     * @return 验证结果
     */
    ActionResult validateDevCode(String orderCode, String serviceCode, Date orderDate, String developStaffId, String developStaffIdKfk);


}
